package band.wukong.practice.java.core.pack.util.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Desc: 正则表达式的四种用途: 查询、提取、分割、替换/删除
 * Author: wukonggg@139.com
 * Date: 2010-3-17 9:11:09
 */
public class FourUseageOfRegex {

    public static void main(String[] args) {
        query();
//        extract();
//        split();
//        replace();
    }

    public static void query() {
        String regEx = "a|f"; //表示a或f
        String str = "abc efg ABC";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        System.out.println("m.find() = " + m.find());
        /*
            如果str中有regEx，那么rs为true，否则为flase。
            如果想在查找时忽略大小写，则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE)
         */
    }

    /**
     * 提取
     */
    public static void extract() {
        //TODO 貌似不对对对对对对对对对对对对对对对对对对对对对对对对对
        String regex = "(.*.txt$)";
        String str = "name.txt";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        while (m.find()) {
            for (int i = 0; i <= m.groupCount(); i++) {
                System.out.println("m.group(" + i + ") = " + m.group(i));
            }
        }
        /*
            以上的执行结果为name.txt，
            提取的字符串储存在m.group(i)中，其中i最大值为m.groupCount();
         */
    }

    public static void split() {
        String regEx = "::";
        Pattern p = Pattern.compile(regEx);
        String[] array = p.split("xd::abc::cde");

        for (String s : array) {
            System.out.println("r[i] = " + s);
        }
        //执行后，r就是{"xd","abc","cde"}，其实分割时还有跟简单的方法：String[] array = str.split("::"); 
    }

    public static void replace() {
        String regEx = "a+"; //表示一个或多个a

        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher("aaabbced a ccdeaa");

        System.out.println("m.replaceAll(\"A\") = " + m.replaceAll("A"));
        //　　结果为"Abbced A ccdeA"

        /*
            如果写成空串，既可达到删除的功能，比如：
            String s=m.replaceAll("");
            结果为"bbced ccde"
         */
    }
}
